﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ArgusPCLib.Mathematics
{
	/// <summary>
	/// Implementors must delcare the following methods:
	/// <code>
	/// public static T Parse(string text, string format, IFormatProvider formatProvider);
	/// public static bool TryParse(string text, string format, IFormatProvider formatProvider, out T value);
	/// public static int Parse(Stream stream, string format, IFormatProvider, out T value);
	/// </code>
	/// where T is the implementing Type (T : IOperand).
	/// </summary>
	/// <seealso cref="ArgusPCLib.Mathematics.Reflection.OperandReflector"/>
	/// <seealso cref="ArgusPCLib.Mathematics.Reflection.OperandReflector.MethodNames"/>
	/// <seealso cref="ArgusPCLib.Mathematics.Reflection.OperandReflector{T}"/>
	/// <seealso cref="ArgusPCLib.Mathematics.Reflection.OperandReflector{T}.Parse(string,string,IFormatProvider)"/>
	/// <seealso cref="ArgusPCLib.Mathematics.Reflection.OperandReflector{T}.TryParse(string,string,IFormatProvider,out T)"/>
	/// <seealso cref="ArgusPCLib.Mathematics.Reflection.OperandReflector{T}.PartialParse(string,string,IFormatProvider,out T)"/>
	public interface IOperand : IFormattable
	{
		IOperand GetDeepCopy();
	}
}
